#include "Mensaje.h"

Mensaje::Mensaje(){
		src = "";
		dest = "";
		mensaje = "vacío";
}

Mensaje::Mensaje(char *buffer) {
	string m (buffer);
	parsear(m);
}

Mensaje::Mensaje(const Mensaje &m){
	this->idCliente = m.idCliente;
	this->idConversacion = m.idConversacion;
	this->src = m.src;
	this->dest = m.dest;
	this->tipo = m.tipo;
	this->mensaje = m.mensaje;
}

Mensaje::Mensaje(string src, string dest, TipoMensaje tipo, string mensaje){
	this->src = src;
	this->dest = dest;
	this->tipo = tipo;
	this->mensaje = mensaje;
}

Mensaje Mensaje::operator=(const Mensaje m){
	this->idCliente = m.idCliente;
	this->idConversacion = m.idConversacion;
	this->src = m.src;
	this->dest = m.dest;
	this->tipo = m.tipo;
	this->mensaje = m.mensaje;

	return *this;
}

string Mensaje::getDest() const
{
    return dest;
}

int Mensaje::getIdConversacion(){
	return idConversacion;
}

void Mensaje::setIdConversacion(int id){
	idConversacion = id;
}

int Mensaje::getIdCliente()
{
    return idCliente;
}

string Mensaje::getMensaje() const
{
    return mensaje;
}

string Mensaje::getSrc() const
{
    return src;
}

TipoMensaje Mensaje::getTipo() const
{
    return tipo;
}

void Mensaje::setDest(string dest)
{
    this->dest = dest;
}

void Mensaje::setIdCliente(int id)
{
    this->idCliente = id;
}

void Mensaje::setMensaje(string mensaje)
{
    this->mensaje = mensaje;
}

void Mensaje::setSrc(string src)
{
    this->src = src;
}

void Mensaje::setTipo(TipoMensaje tipo)
{
    this->tipo = tipo;
}

string Mensaje::toString(){
	string t;
	switch (tipo){
	case CONECTAR:
		t="CONECTAR";
		break;
	case DESCONECTAR:
		t="DESCONECTAR";
		break;
	case INICIAR_CONVERSACION:
		t="INICIAR_CONVERSACION";
		break;
	case ELIMINAR_CONVER:
		t="ELIMINAR_CONVER";
		break;
	case CONV_ACTIVAS:
		t="CONV_ACTIVAS";
		break;
	case PARTIC_ACTIVOS:
		t="PARTIC_ACTIVOS";
		break;
	case UNIRSE_CONV:
		t="UNIRSE_CONV";
		break;
	case DEJAR_CONV:
		t="DEJAR_CONV";
		break;
	case ERROR:
		t = "ERROR";
		break;
	case OK:
		t = "OK";
		break;
	case CONVERSAR:
		t = "CONVERSAR";
		break;
	}
	return (src + FuncionesComunes::Separador + dest + FuncionesComunes::Separador + t + FuncionesComunes::Separador + mensaje + '\0');
}

void Mensaje::parsear(string buffer){

	char *token = strtok(FuncionesComunes::ConvertirACharPointer(buffer),"-");
	string aux = token;
	src = aux;

	token = strtok(NULL,"-");
	aux = token;
	dest = aux;

	token = strtok(NULL,"-");
	if (strcmp(token,"CONECTAR") == 0){
		tipo = CONECTAR;
	}else if (strcmp(token,"DESCONECTAR") == 0){
		tipo = DESCONECTAR;
	}else if (strcmp(token,"INICIAR_CONVERSACION") == 0){
		tipo = INICIAR_CONVERSACION;
	}else if (strcmp(token,"ELIMINAR_CONVER") == 0){
		tipo = ELIMINAR_CONVER;
	}else if(strcmp(token,"CONV_ACTIVAS") == 0){
		tipo = CONV_ACTIVAS;
	}else if(strcmp(token,"PARTIC_ACTIVOS") == 0){
		tipo = PARTIC_ACTIVOS;
	}else if(strcmp(token,"UNIRSE_CONV") == 0) {
		tipo = UNIRSE_CONV;
	}else if(strcmp(token,"DEJAR_CONV") == 0){
		tipo = DEJAR_CONV;
	}else if(strcmp(token,"ERROR") == 0){
		tipo = ERROR;
	}else if(strcmp(token,"OK") == 0){
		tipo = OK;
	}else if (strcmp(token,"CONVERSAR") == 0){
		tipo = CONVERSAR;
	}

	token = strtok(NULL,"-");
	aux  = token;
	mensaje = aux;

}

Mensaje::~Mensaje() {

}
